package fr.afcepf.atod18.service;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

import org.junit.BeforeClass;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;

import fr.afcepf.atod18.dao.IdaoDevise;
import fr.afcepf.atod18.dao.IdaoPays;
import fr.afcepf.atod18.data.Devise;
import fr.afcepf.atod18.data.Pays;

@WebService
public class ConversionDeviseImpl implements ConversionDevise {
	
//	 private IdaoDevise daoDevise = new DaoDevise();
	 private static IdaoDevise daoDevise;
	 private static IdaoPays daoPays;
	 private static ApplicationContext context;

	 @BeforeClass
	    public static void oneTimeSetUp() {
	    	context=new ClassPathXmlApplicationContext("springConf.xml");
	    	daoPays=(IdaoPays) context.getBean("daoPays");
	    	daoDevise=(IdaoDevise) context.getBean("daoDevise");
	    }

	public IdaoDevise getDaoDevise() {
		return daoDevise;
	}

	public void setDaoDevise(IdaoDevise daoDevise) {
		this.daoDevise = daoDevise;
	}

	/**
	 * @return the daoPays
	 */
	public IdaoPays getDaoPays() {
		return daoPays;
	}

	/**
	 * @param daoPays the daoPays to set
	 */
	public void setDaoPays(IdaoPays daoPays) {
		this.daoPays = daoPays;
	}

	@Override
	public double conversion(double paramMontant, String paramMonnaieSource, String paramMonnaieCible) {
		double montant = paramMontant
				* daoDevise.rechercher(paramMonnaieCible).getTaux()
				/  daoDevise.rechercher(paramMonnaieSource).getTaux();
		return montant;
	}

	@Override
	public double taux(String paramMonnaieSource, String paramMonnaieCible) {
		double montant = daoDevise.rechercher(paramMonnaieCible).getTaux()
				/  daoDevise.rechercher(paramMonnaieSource).getTaux();
		return montant;
	}

	@Override
	public Devise chercherDevisePays(String paramMonnaieSource,
			int paramIdPaysCible) {
		double tauxSource =  daoDevise.rechercher(paramMonnaieSource).getTaux();
		Pays p = daoPays.get(paramIdPaysCible);
		p.getDevise().setTaux(p.getDevise().getTaux()/tauxSource);
		return p.getDevise();
	}

	@Override
	public List<Pays> listerPays(String paramMonnaieSource) {
		List<Pays> liste =new ArrayList();
		liste = daoPays.lister();
		double tauxSource =  daoDevise.rechercher(paramMonnaieSource).getTaux();
		for (Pays p:liste){
			p.getDevise().setTaux(p.getDevise().getTaux()/tauxSource);
		}
		return liste;
	}

}